﻿
Imports System.Data.SqlClient
Public Class EstudianteDAO

    Public Function insertar(ByVal modelo As Estudiante) As Estudiante

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "INSERT INTO ESTUDIANTE (IDCENTROESTUDIO,NOMBRES,APELLIDOP,APELLIDOM,EDAD,DIRECCION,TELEFONO,CORREO,ESTADO,DNI,CLAVE) VALUES (@VALOR2, @VALOR3, @VALOR4, @VALOR5, @VALOR6, @VALOR7, @VALOR8, @VALOR9, @VALOR10, @VALOR11, @VALOR12)"

            Dim cmd As New SqlCommand(sql, cn)

            cmd.Parameters.AddWithValue("@VALOR2", modelo.idCentroEstudio)
            cmd.Parameters.AddWithValue("@VALOR3", modelo.Nombres)
            cmd.Parameters.AddWithValue("@VALOR4", modelo.ApellidoP)
            cmd.Parameters.AddWithValue("@VALOR5", modelo.ApellidoM)
            cmd.Parameters.AddWithValue("@VALOR6", modelo.Edad)
            cmd.Parameters.AddWithValue("@VALOR7", modelo.Direccion)
            cmd.Parameters.AddWithValue("@VALOR8", modelo.Telefono)
            cmd.Parameters.AddWithValue("@VALOR9", modelo.Correo)

            cmd.Parameters.AddWithValue("@VALOR11", modelo.DNI)
            cmd.Parameters.AddWithValue("@VALOR12", modelo.Clave)
            Dim afectados = cmd.ExecuteNonQuery

            If afectados <> 1 Then
                Throw New DAOExcepcion("EstudianteDAO: No insertó")
            End If

            ' LEER EL ULTIMO ID
            sql = "SELECT @@IDENTITY"
            cmd = New SqlCommand(sql, cn)
            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                'modelo.idEstudiante = CType(dr(0), Integer)
            End If

            dr.Close()
            cn.Close()

        Catch ex As Exception
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return modelo

    End Function

    Public Sub actualizar(ByVal modelo As Estudiante)
        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "UPDATE ESTUDIANTE SET idCentroEstudio=@VALOR1, Nombres=@VALOR2, ApellidoP=@VALOR3, ApellidoM=@VALOR4, Edad=@VALOR5, Direccion=@VALOR6, Telefono=@VALOR7, Correo=@VALOR8, EstadoCiv=@VALOR9, DNI=@VALOR10, Clave=@VALOR11 WHERE IDESTUDIANTE=@VALOR12"

            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", modelo.idCentroEstudio)
            cmd.Parameters.AddWithValue("@VALOR2", modelo.Nombres)
            cmd.Parameters.AddWithValue("@VALOR3", modelo.ApellidoP)
            cmd.Parameters.AddWithValue("@VALOR4", modelo.ApellidoM)
            cmd.Parameters.AddWithValue("@VALOR5", modelo.Edad)
            cmd.Parameters.AddWithValue("@VALOR6", modelo.Direccion)
            cmd.Parameters.AddWithValue("@VALOR7", modelo.Telefono)
            cmd.Parameters.AddWithValue("@VALOR8", modelo.Correo)
            cmd.Parameters.AddWithValue("@VALOR9", modelo.EstadoCiv)
            cmd.Parameters.AddWithValue("@VALOR10", modelo.DNI)
            cmd.Parameters.AddWithValue("@VALOR11", modelo.Clave)
            cmd.Parameters.AddWithValue("@VALOR12", modelo.idEstudiante)


            Dim afectados = cmd.ExecuteNonQuery

            If afectados <> 1 Then
                Throw New DAOExcepcion("EstudianteDAO: No actualizó")
            End If

            cn.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
            Throw New DAOExcepcion(ex.ToString)
        End Try
    End Sub


    Public Function obtener(ByVal idEstudiante As Integer) As Estudiante
        Dim modelo As New Estudiante

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT idEstudiante, idCentroEstudio, Nombres, ApellidoP, ApellidoM, Edad, Direccion, Telefono, Correo, EstadoCiv, DNI, Clave FROM ESTUDIANTE WHERE idEstudiante=@VALOR1"
            Dim cmd As New SqlCommand(sql, cn)

            cmd.Parameters.AddWithValue("@VALOR1", idEstudiante)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then

                modelo.idEstudiante = dr(0).ToString
                modelo.idCentroEstudio = dr(1).ToString
                modelo.Nombres = dr(2).ToString
                modelo.ApellidoP = dr(3).ToString
                modelo.ApellidoM = dr(4).ToString
                modelo.Edad = dr(5).ToString
                modelo.Direccion = dr(6).ToString
                modelo.Telefono = dr(7).ToString
                modelo.Correo = dr(8).ToString
                modelo.EstadoCiv = dr(9).ToString
                modelo.DNI = dr(10).ToString
                modelo.Clave = dr(11).ToString


            End If

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return modelo
    End Function

    Public Function listar() As Collection
        Dim lista As New Collection
        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT idEstudiante,CentroEstudio.Nombre,Nombres,ApellidoP,ApellidoM,Edad,Estudiante.Direccion,Telefono,Correo,EstadoCiv,DNI,Clave FROM Estudiante,CentroEstudio WHERE Estudiante.idCentroEstudio=CentroEstudio.idCentroEstudio order by ApellidoP"
            Dim cmd As New SqlCommand(sql, cn)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            While dr.Read
                Dim modelo As New Estudiante

                modelo.idEstudiante = dr(0).ToString
                modelo.idCentroEstudio = dr(1).ToString
                modelo.Nombres = dr(2).ToString
                modelo.ApellidoP = dr(3).ToString
                modelo.ApellidoM = dr(4).ToString
                modelo.Edad = dr(5).ToString
                modelo.Direccion = dr(6).ToString
                modelo.Telefono = dr(7).ToString
                modelo.Correo = dr(8).ToString
                modelo.EstadoCiv = dr(9).ToString
                modelo.DNI = dr(10).ToString
                modelo.Clave = dr(11).ToString


                lista.Add(modelo)
            End While

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return lista
    End Function

    Public Function buscarPorNombre(ByVal Nombres As String) As Collection
        Dim lista As New Collection

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT idEstudiante,CentroEstudio.Nombre,Nombres,ApellidoP,ApellidoM,Edad,Estudiante.Direccion,Telefono,Correo,EstadoCiv,DNI,Clave FROM Estudiante,CentroEstudio WHERE Estudiante.idCentroEstudio=CentroEstudio.idCentroEstudio and UPPER(Nombres) LIKE @VALOR1 order by ApellidoP"
            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", "%" + "%" + Nombres.ToUpper + "%" + "%" + "%" + "%" + "%" + "%" + "%" + "%" + "%")

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()

            While dr.Read
                Dim modelo As New consultaEstudiante

                modelo.idEstudiante = dr(0).ToString
                modelo.CentroEstudio = dr(1).ToString
                modelo.Nombres = dr(2).ToString
                modelo.ApellidoP = dr(3).ToString
                modelo.ApellidoM = dr(4).ToString
                'modelo.CentroEstudio = dr(4).ToString
                modelo.Edad = dr(5).ToString
                modelo.Direccion = dr(6).ToString
                modelo.Telefono = dr(7).ToString
                modelo.Correo = dr(8).ToString
                modelo.EstadoCiv = dr(9).ToString
                modelo.DNI = dr(10).ToString
                modelo.Clave = dr(11).ToString


                lista.Add(modelo)
            End While

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return lista
    End Function


    Public Function validar(ByVal modelo As Estudiante) As Estudiante
        Dim usuario As New Estudiante

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT IDESTUDIANTE, IDCENTROESTUDIO,NOMBRES, APELLIDOP, APELLIDOM, EDAD, DIRECCION, TELEFONO, CORREO, ESTADOCIV, DNI, CLAVE  FROM ESTUDIANTE WHERE CORREO=@VALOR9 AND CLAVE=@VALOR12"
            Dim cmd As New SqlCommand(sql, cn)

            cmd.Parameters.AddWithValue("@VALOR9", modelo.Correo)
            cmd.Parameters.AddWithValue("@VALOR12", modelo.Clave)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                usuario.idEstudiante = dr(0).ToString
                usuario.idCentroEstudio = dr(1).ToString
                usuario.nombres = dr(2).ToString
                usuario.ApellidoP = dr(3).ToString
                usuario.ApellidoM = dr(4).ToString
                usuario.Edad = dr(5).ToString
                usuario.direccion = dr(6).ToString
                usuario.telefono = dr(7).ToString
                usuario.Correo = dr(8).ToString
                usuario.EstadoCiv = dr(9).ToString
                usuario.DNI = dr(10).ToString
                usuario.Clave = dr(11).ToString


            Else
                Throw New DAOExcepcion("Usuario y/o clave incorrecto")
            End If

            dr.Close()


        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return usuario
    End Function


End Class